// class User {
//   account: string; // 必须是3-5个字符
//   pwd: string; // 必须是6-12个字符
//   age: number; // 必须是数字 0-100
//   gender: "男" | "女";
// }

import { type } from "os";

// const u = new User()

// // 对用户对象中的数据进行验证

// // 验证的代码应该写到那？


// function test(target: Function) {

// }

// function test(target: new () => object) {
//   console.log(target); // Class A
//   return class B {}
// }

// @test
// class A {}

// const a = new A()
// console.log(a); // B {}


// function test(target: any) {
//   return function test(target: new (...args:any[]) => object) {

//   } 
// }

// @test('额外参数')
// class A {}

// const a = new A()
// console.log(a); // B {}




// type constructor = new (...args: any[]) => object
// function test1(target: constructor) {
//   console.log('test1');
// }
// function test2(target: constructor) {
//   console.log('test2');
// }

// @test1
// @test2
// class A { }


// type constructor = new (...args: any[]) => object
// function test1() {
//   console.log('test1');
//   return function (target: constructor) {
//     console.log('test1-constructor');
//   }
// }
// function test2() {
//   console.log('test2');
//   return function (target: constructor) {
//     console.log('test2-constructor');
//   }
// }

// @test1()
// @test2()
// class A { }



function dec(target: any, key:string) {
  console.log(target, key); 
}

// function  fd(target: any, key:string, dec:PropertyDescriptor) {
//   console.log(target, key, dec); 
// }

// class A {

//   // @dec
//   // prop1:string

//   // @dec
//   // static prop2:string

//   @fd
//   fu1(){} 

//   @fd
//   static fu2(){}

// }


function  useless(target: any, key:string, dec:PropertyDescriptor) {
  dec.value = function () {
    console.warn(key+'方法已过期')
  }
}

class A {
  @useless
  fu1(){
    console.log('调用函数了');
  }
}

const a = new A()
a.fu1() // fu1方法已过期